/**
 * 
 */
package co.com.sed.model.peers;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;

import co.com.sed.model.beans.Periodo;
import co.com.sed.model.util.Util;

/**
 * @author Mejia
 *
 */
public class PeriodoPeer {

	private static final String BUSCAR_PERIODOS =
			"SELECT id_periodo, descripcion FROM periodo";

	private static final String BUSCAR_PERIODO  =	
			"SELECT id_periodo, descripcion FROM periodo "+
			"WHERE id_periodo = &id_periodo";

	private static final String INSERTAR_PERIODO  =
			"INSERT INTO periodo(descripcion) VALUES "+
			"('&descripcion')";

	private static final String ACTUALIZAR_PERIODO =
			"UPDATE periodo "+
			"SET descripcion = '&descripcion' "+
			"WHERE id_periodo = &id_periodo";

	private static final String ELIMINAR_PERIODO =
			"DELETE FROM periodo "+
			"WHERE id_periodo = &id_periodo";

	
	
		/** 
		 * busca en la base de datos todos los registros de la tabla "periodo"
		 * 
		 * @param stmt			referencia al Statement, pasado por DataManager para realizar la consulta
		 * 
		 * @return				lista de periodo
		 * @see         		Periodo, Statement
		 */
	
	public static ArrayList<Periodo> buscarPeriodos(Statement stmt) {
		ArrayList<Periodo> periodos = new ArrayList<Periodo>();

		String sql = BUSCAR_PERIODOS; //"SELECT id_periodo, descripcion FROM periodo";

		ResultSet rs;
		try {
			rs = stmt.executeQuery(sql);
			try {
				while (rs.next()) {
					Periodo per = new Periodo();

					per.setIdPeriodo(rs.getInt("id_periodo"));
					per.setDescripcion(rs.getString("descripcion")); 
					
					periodos.add(per);
				}
			} finally {
				rs.close();
			}
		} catch (SQLException e) {
			Util.print("No es posible consultar la base de datos:"
					+ e.getMessage());
			e.printStackTrace();
		}

		return periodos;
	}
	
			/**
			 *  busca en la base de datos un registro de la tabla "periodo"
			 * 
			 * @param stmt				referencia al Statement, pasado por DataManager para realizar la consulta
			 * @param idPeriodo		    id de la periodo que se desea cosultar
			 * 
			 * @return					periodo buscada
			 * @see         			Periodo, Statement
			 */
	
	public static Periodo buscarPeriodo(Statement stmt, int idPeriodo) {
		Periodo periodo = new Periodo();

		String sql = BUSCAR_PERIODO;
		//"SELECT id_periodo, descripcion FROM periodo "+
		//"WHERE id_periodo = &id_periodo";
		
		
		// se setean los "parametros"
		sql = sql.replaceAll("&id_periodo", String.valueOf(idPeriodo));
		
		ResultSet rs;
		try {
			rs = stmt.executeQuery(sql);
			try {
				if (rs.next()) {
					periodo.setIdPeriodo(rs.getInt("id_periodo"));
					periodo.setDescripcion(rs.getString("descripcion"));
				}
			} finally {
				rs.close();
			}
		} catch (SQLException e) {
			Util.print("No es posible consultar la base de datos:" + e.getMessage());
			e.printStackTrace();
		}

		return periodo;
	}
	
		/**
		 *  Inserta un Periodo en la base de datos
		 * 
		 * @param stmt				referencia al Statement, pasado por DataManager para ejecutar la sentencia
		 * @param periodo		    periodo que se va a insertar en la base de datos
		 *  
		 * @return					void
		 * @throws SQLException		si ocurre un error al insertar el registro en la base de datos
		 * 
		 * @see         			DataManager
		 */
	
	public static int insertarPeriodo(Statement stmt, Periodo periodo) throws SQLException {
		int idNuevoPeriodo = -1;
		ResultSet rs = null;
		
		try {
			String sql = INSERTAR_PERIODO;
			 //se setean los "parametros": &id_calificacion, &cualitativa, &cuantitativa, &descripcion 
			sql = sql.replaceAll("&descripcion", periodo.getDescripcion());
			
			stmt.executeUpdate(sql,Statement.RETURN_GENERATED_KEYS);
			
			rs = stmt.getGeneratedKeys();
			if (rs.next()) {
				idNuevoPeriodo = rs.getInt("id_periodo");
				Util.print("nuevo registro: " + idNuevoPeriodo);
			}
		} finally {
			rs.close();
		}
		
		return idNuevoPeriodo;
	}


		/**
		 *  Actualiza una periodo en la base de datos
		 * 
		 * @param stmt				referencia al Statement, pasado por DataManager para ejecutar la sentencia
		 * @param periodo			periodo que se va a actualizar en la base de datos
		 * 
		 * @return					void
		 * @throws SQLException		si ocurre un error al actualizar el registro en la base de datos
		 * 
		 * @see         			DataManager
		 */
	
	public static void actualizarPeriodo(Statement stmt, Periodo periodo) throws SQLException {
		String sql = ACTUALIZAR_PERIODO;
		 //se setean los "parametros": &id_periodo, &descripcion
		sql = sql.replaceAll("&id_periodo", "" + periodo.getIdPeriodo())
				 .replaceAll("&descripcion", periodo.getDescripcion());
		stmt.executeUpdate(sql);
	}
	
		/**
		 *  Elimina un Periodo en la base de datos
		 * 
		 * @param stmt				referencia al Statement, pasado por DataManager para ejecutar la sentencia
		 * @param Periodo			periodo que se va a eliminar en la base de datos
		 * 
		 * @return					void
		 * @throws SQLException		si ocurre un error al eliminar el registro en la base de datos
		 * 
		 * @see         			DataManager
		 */
	
	public static void eliminarPeriodo(Statement stmt, Periodo periodo) throws SQLException {
		String sql = ELIMINAR_PERIODO;
		// se setean los "id_periodo = &id_periodo";
		sql = sql.replaceAll("&id_periodo", "" + periodo.getIdPeriodo());

		stmt.executeUpdate(sql);
	}
	
}
